package com.innjia.sys.service;

import com.innjia.base.page.Page;
import com.innjia.dto.UserWindowDto;
import com.innjia.sys.entity.UserEntity;

import java.util.List;
import java.util.Map;

/**
 * 系统用户表
 *
 * @author chenshun
 * @email huangxianyuan@gmail.com
 * @date 2017-05-03 09:41:38
 */
public interface UserService {

    UserEntity queryObject(String id);

    /**
     * 根据OAuth2的Uid获取用户信息(用于单点登录)
     *
     * @param uid
     * @param loginSrc
     * @return
     */
    default UserEntity queryByUid(String uid, String loginSrc) {
        throw new RuntimeException("当前接口未实现");
    }

    /**
     * 根据电话号码查询用户
     *
     * @param phone
     * @return
     */
    default UserEntity queryByPhone(String phone) {
        throw new RuntimeException("当前接口未实现");
    }

    default Page queryList(Map<String, Object> map) {
        throw new RuntimeException("未实现的接口");
    }

    void save(UserEntity user);

    void update(UserEntity user);

    void delete(String id);

    void deleteBatch(String[] ids);

    /**
     * 根据登陆用户查询有效的用户
     *
     * @param logName
     * @return
     */
    default UserEntity queryByLoginName(String logName) {
        throw new RuntimeException("未实现的方法");
    }

    /**
     * 用户对应的机构id,数据权限控制
     *
     * @param userId
     * @return key:roleId 角色id value:角色所对应的机构集合
     */
    Map<String, List<String>> queryBapidByUserId(String userId);

    /**
     * 用户对应的机构id,数据权限控制
     *
     * @param userId
     */
    List<String> queryBapidByUserIdArray(String userId);


    /**
     * 用户对应的部门id,数据权限控制
     *
     * @param userId
     * @return key:roleId 角色id value:角色所对应的部门集合
     */
    Map<String, List<String>> queryBaidByUserId(String userId);

    /**
     * 用户对应的部门id,数据权限控制
     *
     * @param userId
     */
    List<String> queryBaidByUserIdArray(String userId);

    /**
     * 根据条件分页查询
     *
     * @param userEntity
     * @param pageNum
     * @return
     */
    Page findPage(UserWindowDto userEntity, int pageNum);

    /**
     * 修改密码
     *
     * @param user
     * @return
     */
    int updatePassword(UserEntity user);

    /**
     * 批量更新角色状态
     *
     * @param status
     *         状态(0正常 -1禁用)
     * @return
     */
    int updateBatchStatus(String[] ids, String status);

    /**
     * 重置密码
     *
     * @param ids
     * @return
     */
    int resetPassWord(String[] ids);


}
